/*
 * Copyright (C) 2015 yixun All Rights Reserved.
 *
 * PremisesMapper.java
 */
package com.yixun.qfbao.xf.mapper;

import com.yixun.qfbao.model.ReportInfo;
import com.yixun.qfbao.xf.model.Premises;
import com.yixun.qfbao.xf.model.dto.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * [文件名称]<br>
 * PremisesMapper.java<br>
 * <br>
 * [文件描述]<br>
 * 楼盘信息 mapper<br>
 * <br>
 * [修改记录]<br>
 * 2015-10-14 15:34:13 创建 陶俊代码生成器<br>
 *
 * @author 陶俊代码生成器
 * @version 1.00
 */
public interface PremisesMapper {

	/**
	 * 新增
	 *
	 * @param premises
	 *            新增BEAN信息
	 * @return 操作行数
	 */
	int add(Premises premises);

	/**
	 * 删除
	 *
	 * @param premisesDto
	 *            满足删除的条件
	 * @return 操作行数
	 */
	int del(PremisesDto premisesDto);

	/**
	 * 删除
	 *
	 * @param ids
	 *            待删除的唯一主键拼接的字符串,主键间以,隔开
	 * @return 操作行数
	 */
	int dels(String ids);

	/**
	 * 编辑
	 *
	 * @param premises
	 *            需要编辑的BEAN信息
	 */
	int edit(Premises premises);

    /**
     * 更新所有属性
     * @param premises
     * @return
     */
	int updateByPrimaryKey(Premises premises);

	/**
	 * 编辑
	 *
	 * @param premises
	 *            需要编辑的BEAN信息
	 * @param ids
	 *            待编辑的唯一主键拼接的字符串,主键间以,隔开
	 * @return 更新行数
	 */
	int edits(@Param("premisesDto") Premises premises, @Param("ids") String ids);

	/**
	 * 搜索总数
	 *
	 * @param premisesDto
	 *            搜索条件
	 * @return 符合条件记录总数
	 */
	int count(PremisesDto premisesDto);

	/**
	 * 搜索总数
	 *
	 * @param premisesDto
	 *            搜索条件
	 * @return 符合条件记录总数
	 */
	int countByArea(PremisesDto premisesDto);

	/**
	 * 搜索总数
	 *
	 * @param premisesDto
	 *            搜索条件
	 * @return 符合条件记录总数
	 */
	int countByAcreage(PremisesDto premisesDto);

	/**
	 * 搜索 - 支持分页
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @param beginNum
	 *            分页开始页不包含
	 * @param endNum
	 *            分页结束页不包含
	 * @return 分页数据
	 */
	List<Premises> list(@Param("premisesDto") PremisesDto premisesDto, @Param("beginNum") int beginNum,
			@Param("endNum") int endNum);

	/**
	 * 搜索 - 支持分页
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @param beginNum
	 *            分页开始页不包含
	 * @param endNum
	 *            分页结束页不包含
	 * @return 分页数据
	 */
	List<Premises> listByArea(@Param("premisesDto") PremisesDto premisesDto, @Param("beginNum") int beginNum,
			@Param("endNum") int endNum);

	/**
	 * 搜索 - 支持分页
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @param beginNum
	 *            分页开始页不包含
	 * @param endNum
	 *            分页结束页不包含
	 * @return 分页数据
	 */
	List<PremisesDto> listByAcreage(@Param("premisesDto") PremisesDto premisesDto, @Param("beginNum") int beginNum,
			@Param("endNum") int endNum);
	
	
	/**
	 * 查询楼盘信息，并按照主推、关注、创建时间排序
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @param beginNum
	 *            分页开始页不包含
	 * @param endNum
	 *            分页结束页不包含
	 * @return 分页数据
	 */
	List<PremisesDto> getPremisesIncludeAttetion(@Param("premisesDto") PremisesDto premisesDto, @Param("beginNum") int beginNum,
			@Param("endNum") int endNum);
	
	/**
	 * 搜索总数
	 *
	 * @param premisesDto
	 *            搜索条件
	 * @return 符合条件记录总数
	 */
	int countPremisesInfo(@Param("premisesDto") PremisesDto premisesDto);
	
	/**
	 * 搜索
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return list
	 */
	List<Premises> getListByAcreage(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	List<Premises> selectListByDto(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	List<Premises> selectSimpleListByDto(@Param("premisesDto") PremisesDto premisesDto);
	
	/**
	 * 搜索
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	List<Premises> selectPremisesNameByPremisesIds(@Param("premisesDto") PremisesDto premisesDto);

	List<Premises> selectListByDtoWithQuick(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	List<Premises> selectMyListByDto(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索 特殊需求（楼盘删除，报备列表信息不变。无del_flag条件）
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	List<Premises> selectListByDto2(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	List<Premises> selectLpInfo(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索 - 支持分页
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	Premises selectByDto(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * @param id
	 * @return 根据id查询记录
	 */
	Premises selectById(@Param("id") Long id);

	Premises selectSimpleById(@Param("id") Long id);

	/**
	 * 搜索楼盘所在的城市
	 */
	List<ZPremisesDto> selectPremisesCityListByDto(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索总数
	 *
	 * @param premisesDto
	 *            搜索条件
	 * @return 符合条件记录总数
	 */
	int findPremisesByPartnerCount(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索 - 支持分页
	 *
	 * @param beginNum
	 *            分页开始页不包含
	 * @param endNum
	 *            分页结束页不包含
	 * @return 分页数据
	 */
	List<Premises> findPremisesByPartnerList(@Param("premisesDto") PremisesDto premisesDto,
			@Param("beginNum") int beginNum, @Param("endNum") int endNum);

	/**
	 * 搜索
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	List<Premises> listByName(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 搜索
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return 分页数据
	 */
	List<Premises> selectPremisesList(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 特殊需求（del_flag='1'）
	 *
	 * @param premisesId
	 * @return
	 */
	Premises selectById2(Long premisesId);

	/**
	 * 获取已设置佣金规则的楼盘列表
	 *
	 * @param premisesDto
	 * @return
	 */
	List<PremisesDto> selectPremisesListWithRule(PremisesDto premisesDto);

	/**
	 * 获取已设置佣金规则的楼盘列表
	 *
	 * @param premisesDto
	 * @return
	 */
	int selectPremisesPageListCountWithRule(PremisesDto premisesDto);

	/**
	 * 获取已设置佣金规则的楼盘列表
	 *
	 * @param premisesDto
	 * @return
	 */
	List<PremisesDto> selectPremisesPageListWithRule(@Param("premisesDto") PremisesDto premisesDto,
			@Param("beginNum") int beginNum, @Param("endNum") int endNum);

	/**
	 * 获取已设置佣金规则的楼盘列表
	 *
	 * @param premisesDto
	 * @return
	 */
	int selectPremisesPageListCountWithRuleForCaseMember(@Param("premisesDto") PremisesDto premisesDto,@Param("caseMemberId") Long caseMemberId);
	/**
	 * 获取已设置佣金规则的楼盘列表(案场助手人员)
	 *
	 * @param premisesDto
	 * @return
	 */
	List<PremisesDto> selectPremisesPageListWithRuleForCaseMember(@Param("premisesDto") PremisesDto premisesDto,@Param("caseMemberId") Long caseMemberId,
			@Param("beginNum") int beginNum, @Param("endNum") int endNum);

	/**
	 * 一二手联动获取已审核的楼盘
	 *
	 * @param premisesDto
	 * @param beginNum
	 * @param endNum
	 * @return
	 */
	List<PremisesDto> selectPremisesPageForOther(@Param("premisesDto") PremisesDto premisesDto,
			@Param("beginNum") int beginNum, @Param("endNum") int endNum);

	/**
	 * 一二手联动获取已审核的楼盘 总数
	 *
	 * @param premisesDto
	 * @return
	 */
	int selectPremisesCountForOther(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 一二手联动获取楼盘信息
	 *
	 * @param premisesId
	 * @return
	 */
	PremisesDto selectPremisesForV10(@Param("premisesId") Long premisesId, @Param("companyId") Long companyId);

	/**
	 * 楼盘审核，变更分销商
	 *
	 * @param premises
	 * @return
	 */
	int audit(Premises premises);

	/**
	 * 楼盘上下架状态变更
	 *
	 * @param premisesDto
	 * @return
	 */
	int changeShelvesStatus(PremisesDto premisesDto);

	/**
	 * 外部分销楼盘
	 *
	 * @param premisesDto
	 *            搜索条件
	 * @return 符合条件记录总数
	 */
	int outsidePremisesCount(PremisesDto premisesDto);

	/**
	 * 搜索 - 支持分页
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @param beginNum
	 *            分页开始页不包含
	 * @param endNum
	 *            分页结束页不包含
	 * @return 分页数据
	 */
	List<PremisesDto> outsidePremisesList(@Param("premisesDto") PremisesDto premisesDto,
			@Param("beginNum") int beginNum, @Param("endNum") int endNum);

	/**
	 * 一二手联动楼盘所在城市
	 *
	 * @return
	 */
	List<PremisesCityDto> selectPremisesCity();

	/**
	 * 获取商户楼盘所在城市分组
	 * @param premisesDto
	 * @return
	 */
	List<PremisesCityDto> selectPremisesCityGroupByPinyin(@Param("premisesDto") PremisesDto premisesDto);

	/**
	 * 楼盘分页(V10楼盘池另外一个版本)
	 *
	 * @param premisesExtDto
	 * @return
	 */
	List<PremisesViewDto> selectPremisesListByDto(@Param("premisesExtDto") PremisesExtDto premisesExtDto);

	/**
	 * 总条数
	 * @param premisesExtDto
	 * @return
	 */
	Integer selectPremisesCount(@Param("premisesExtDto") PremisesExtDto premisesExtDto);

	/**
	 * 更新楼盘营销号
	 * @param premises
	 * @return
	 */
	int updateMarketingNumber(Premises premises);

	List<Premises> selectPremisesOrder(@Param("premisesDto") PremisesDto premisesDto);

    void setPremisesOrder(@Param("premisesList") List<Premises> premisesList);

	/**
	 * 获取驻守楼盘列表
	 */
	List<Premises> selectCaseMemberPremises(@Param("premisesDto") PremisesDto premisesDto,@Param("caseMemberId")Long caseMemberId);

    List<Premises> selectIdListByDto(@Param("premisesDto")PremisesDto entity);
	/**
	 * 搜索人员相关驻守及未驻守楼盘
	 *
	 * @param premisesDto
	 *            blackWhiteList(搜索条件)
	 * @return list
	 */
	List<Premises> getListByCaseMember(@Param("premisesDto") PremisesDto premisesDto);

    List<Premises> checkPremisesName(@Param("premisesDto") PremisesDto dto);

	int updatePremisesMainPush(@Param("premisesDto") PremisesDto premisesDto);

    int premisesTypeCount(@Param("premisesDto") PremisesDto dto);

    List<Premises> selectListForCaseMember(@Param("premisesDto") PremisesDto entity);

    List<Premises> selectIdListByMobileTemp(@Param("premisesDto")PremisesDto entity);

    Premises selectLastPremises(@Param("devCompanyId")Long devCompanyId,@Param("agentCompanyId")Long agentCompanyId);

    Premises getSimpleById(@Param("id")Long id);

    int updatePremisesForRepeatReport(@Param("premisesIdList") List<Long> premisesIdList);

    int updatePremisesForNoRepeatReport(@Param("premisesDto") PremisesDto premisesDto);

	int updatePremisesForCheckSwitch(@Param("premisesIdList") List<Long> premisesIdList);

	int updatePremisesForNoCheckSwitch(@Param("premisesDto") PremisesDto premisesDto);

	int updatePremisesForFreeAudit(@Param("premisesIdList") List<Long> premisesIdList);

	int updatePremisesForNoFreeAudit(@Param("premisesDto") PremisesDto premisesDto);

    int countByPremisesHistory(@Param("premisesDto")PremisesDto premisesDto);

	List<PremisesDto> listByPremisesHistory(@Param("premisesDto") PremisesDto premisesDto, @Param("beginNum") int beginNum, @Param("endNum") int endNum);

    int getAgentPremisesCount(@Param("premisesDto") PremisesDto entity);

	List<ReportInfo> getAgentPremisesList(@Param("premisesDto") PremisesDto entity, @Param("begin") int begin, @Param("pageSize") int pageSize);

	/**
	 * 恒信定时推送 楼盘信息
	 * @param lastTime
	 * @param companyId
	 * @return
	 */
	List<SendPremisesResultDto> getSendPremisesList(@Param("lastTime") String lastTime,@Param("companyId") Long companyId);
}
